<?php
class Dbf{
    
    var $archivoDbf;
    var $dbf;
    var $numColumnas;
    var $numRegistros;
	var $error;
    
    /**
     * Constructor, abre y lee una base de datos dbf
     * @param string $pArchivo Ruta de la base de datos dbf
    */
    function Dbf($pArchivo){
		global $objClases;
        if($pArchivo != ''){
            $this->archivoDbf = $pArchivo;
            
			require_once ($objClases->get('ruta_absoluta'). 'includes/phpxbase/Column.class.php');
			require_once ($objClases->get('ruta_absoluta'). 'includes/phpxbase/Record.class.php');
			require_once ($objClases->get('ruta_absoluta'). 'includes/phpxbase/Table.class.php');
	
			$this->dbf = new XBaseTable($pArchivo);
			$this->dbf->open();
            if($this->dbf->isOpen()){
                $this->numRegistros = $this->dbf->recordCount;
				$this->numColumnas = $this->dbf->getColumnCount();
            }else{
				$this->error = 'El archivo no esta abierto.';
			}
        }
        
    }
    
    /**
     * Regresa un arreglo con los datos
     * @param array $pArreglo Contiene las columnas de la tabla .dbf
    */
    function getDatos($pArreglo){            
        if($this->numColumnas > 0 && $this->numColumnas >= count($pArreglo)){
            if($this->numRegistros > 0){
				$numReg = 0;
                while ($registro=$this->dbf->nextRecord()) {
				    foreach ($this->dbf->getColumns() as $i=>$c) {
						for($reg=0;$reg<sizeof($pArreglo);$reg++)
							if($pArreglo[$reg] === $c->getName()){
								$arr[$numReg][$c->getName()] = $registro->getString($c);
								break;
							}
					    		
				    }
					$numReg++;
			    }
                return $arr;
            }
        }
        return 0;
    }
    
    /**
     * Regresa el numero de columnas que contiene la tabla
    */
    function getNoColumnas(){
        return $this->numColumnas;
    }
    
    /**
     * Busca un registro
     * @param String $pColumna Columna en la cual se establece la consulta
     * @param String $pDato Dato a buscar
     * @return String Arreglo unidimencional con los datos de el registro buscado
    */
    function serchRegistro($pColumna=' ',$pDato=' '){
        $arr = array();
        
        if($this->dbf){
			/*while ($registro=$this->dbf->nextRecord()) {
			    foreach ($this->dbf->getColumns() as $i=>$c) {
					if($pDato === )
				    $arr[][$c->getName()] = $registro->getString($c);
			    }
		    }*/
            for($i=0;$i<=$this->numRegistros;$i++){
                $row = @dbase_get_record_with_names($this->dbf,$i);
                if( (int)$pDato == (int)$row[$pColumna])
                    for($j=0; $j < count($this->encabezadoDbf); $j++)
                        $arr[$j] = $row[$this->encabezadoDbf[$j]['name']];
            }
            return $arr;
	}
        return 0;
    }
    
    /**
     * Regresa el numero de registros que contiene la tabla
    */
    function getNoRegistros(){
        return $this->numRegistros;
    }
    
    /**
     * Regresa un arreglo con la informacion de cabecere de la tabla
    */
    function getCabezera(){
        return $this->encabezadoDbf;    
    }
    
    /**
     * Cierra la base de datos dbf
    */
    function close(){
		return @dbase_close($this->archivoDbf);
    }
}
?>